/**
 * 信用分工具类
 */

/**
 * 获取信用等级信息
 * @param {number} score 信用分
 * @returns {object} 等级信息
 */
export function getCreditLevel(score) {
  if (score >= 800) {
    return {
      level: 'excellent',
      name: '优秀',
      color: '#67C23A',
      bgColor: '#f0f9ff',
      borderColor: '#67C23A'
    }
  } else if (score >= 750) {
    return {
      level: 'good',
      name: '良好',
      color: '#409EFF',
      bgColor: '#ecf5ff',
      borderColor: '#409EFF'
    }
  } else if (score >= 700) {
    return {
      level: 'medium',
      name: '中等',
      color: '#E6A23C',
      bgColor: '#fdf6ec',
      borderColor: '#E6A23C'
    }
  } else if (score >= 650) {
    return {
      level: 'fair',
      name: '一般',
      color: '#F56C6C',
      bgColor: '#fef0f0',
      borderColor: '#F56C6C'
    }
  } else {
    return {
      level: 'poor',
      name: '较差',
      color: '#909399',
      bgColor: '#f4f4f5',
      borderColor: '#909399'
    }
  }
}

/**
 * 计算信用分进度百分比
 * @param {number} currentScore 当前分数
 * @param {number} minScore 最低分数
 * @param {number} maxScore 最高分数
 * @returns {number} 百分比
 */
export function getCreditProgress(currentScore, minScore = 350, maxScore = 850) {
  return Math.round(((currentScore - minScore) / (maxScore - minScore)) * 100)
}

/**
 * 获取信用分颜色（用于图表）
 * @param {number} score 信用分
 * @returns {string} 颜色值
 */
export function getCreditColor(score) {
  const level = getCreditLevel(score)
  return level.color
}

/**
 * 格式化信用分显示
 * @param {number} score 信用分
 * @returns {string} 格式化后的分数
 */
export function formatCreditScore(score) {
  if (!score || isNaN(score)) return '--'
  return Math.round(score).toString()
}

/**
 * 计算信用分差距提示
 * @param {number} currentScore 当前分数
 * @param {number} targetScore 目标分数
 * @returns {object} 差距信息
 */
export function getCreditGapInfo(currentScore, targetScore) {
  const gap = targetScore - currentScore
  
  if (gap <= 0) {
    return {
      hasGap: false,
      message: '您的信用分已达到要求',
      type: 'success'
    }
  }
  
  let message = ''
  let suggestions = []
  
  if (gap <= 10) {
    message = `还需提升${gap}分即可达到要求`
    suggestions = ['完成日常任务', '保持良好信用记录']
  } else if (gap <= 30) {
    message = `还需提升${gap}分，建议完成更多任务`
    suggestions = ['参与平台活动', '完成信用提升任务', '邀请好友注册']
  } else if (gap <= 50) {
    message = `还需提升${gap}分，需要持续努力`
    suggestions = ['完善个人资料', '积极使用平台服务', '按时履约', '参与公益活动']
  } else {
    message = `还需提升${gap}分，建议制定长期计划`
    suggestions = ['全面完善个人信息', '积极参与各类活动', '保持高频使用', '建立良好信用记录']
  }
  
  return {
    hasGap: true,
    gap,
    message,
    suggestions,
    type: 'warning'
  }
}

/**
 * 获取信用分趋势分析
 * @param {array} history 历史记录
 * @returns {object} 趋势分析
 */
export function getCreditTrendAnalysis(history) {
  if (!history || history.length < 2) {
    return {
      trend: 'stable',
      trendText: '数据不足',
      change: 0
    }
  }
  
  const recent = history.slice(-5) // 最近5次记录
  const firstScore = recent[0].score
  const lastScore = recent[recent.length - 1].score
  const change = lastScore - firstScore
  
  let trend = 'stable'
  let trendText = '保持稳定'
  
  if (change > 10) {
    trend = 'rising'
    trendText = '上升趋势'
  } else if (change < -10) {
    trend = 'falling'
    trendText = '下降趋势'
  } else if (change > 0) {
    trend = 'slight-rise'
    trendText = '小幅上升'
  } else if (change < 0) {
    trend = 'slight-fall'
    trendText = '小幅下降'
  }
  
  return {
    trend,
    trendText,
    change,
    recentData: recent
  }
}

/**
 * 计算信用分维度雷达图数据
 * @param {object} dimensions 维度数据
 * @returns {object} 雷达图配置
 */
export function getCreditRadarData(dimensions) {
  const indicators = [
    { name: '行为表现', max: 100 },
    { name: '履约记录', max: 100 },
    { name: '活跃度', max: 100 },
    { name: '社会责任', max: 100 }
  ]
  
  const data = [
    Math.round((dimensions.behaviorScore / 850) * 100),
    Math.round((dimensions.performanceScore / 850) * 100),
    Math.round((dimensions.activityScore / 850) * 100),
    Math.round((dimensions.socialScore / 850) * 100)
  ]
  
  return {
    indicators,
    data: [{
      name: '信用维度',
      value: data,
      areaStyle: {
        color: 'rgba(64, 158, 255, 0.2)'
      },
      itemStyle: {
        color: '#409EFF'
      }
    }]
  }
}

/**
 * 获取信用分等级图标
 * @param {number} score 信用分
 * @returns {string} 图标类名
 */
export function getCreditIcon(score) {
  const level = getCreditLevel(score)
  
  switch (level.level) {
    case 'excellent':
      return 'el-icon-medal'
    case 'good':
      return 'el-icon-trophy'
    case 'medium':
      return 'el-icon-star-on'
    case 'fair':
      return 'el-icon-star-off'
    default:
      return 'el-icon-warning-outline'
  }
}

/**
 * 生成信用分提升建议
 * @param {number} currentScore 当前分数
 * @param {object} dimensions 维度分析
 * @returns {array} 建议列表
 */
export function getCreditImprovementTips(currentScore, dimensions) {
  const tips = []
  const level = getCreditLevel(currentScore)
  
  // 基于当前等级的通用建议
  if (level.level === 'poor' || level.level === 'fair') {
    tips.push({
      title: '完善基础信息',
      description: '上传身份证件，完善个人资料',
      priority: 'high',
      points: '+10~15分'
    })
  }
  
  // 基于维度分析的具体建议
  if (dimensions) {
    if (dimensions.behaviorScore < 700) {
      tips.push({
        title: '提升行为表现',
        description: '完成实名认证，绑定常用联系方式',
        priority: 'high',
        points: '+15~20分'
      })
    }
    
    if (dimensions.performanceScore < 750) {
      tips.push({
        title: '保持履约记录',
        description: '按时归还物品，及时支付费用',
        priority: 'medium',
        points: '+10~25分'
      })
    }
    
    if (dimensions.activityScore < 650) {
      tips.push({
        title: '增加平台活跃度',
        description: '经常使用平台服务，参与活动',
        priority: 'medium',
        points: '+8~15分'
      })
    }
    
    if (dimensions.socialScore < 700) {
      tips.push({
        title: '参与社会公益',
        description: '参加志愿活动，环保回收',
        priority: 'low',
        points: '+20~30分'
      })
    }
  }
  
  // 默认建议
  if (tips.length === 0) {
    tips.push({
      title: '持续保持',
      description: '继续维持良好的信用表现',
      priority: 'low',
      points: '+5~10分'
    })
  }
  
  return tips
}

/**
 * 信用分动画效果配置
 * @param {number} score 信用分
 * @returns {object} 动画配置
 */
export function getCreditScoreAnimation(score) {
  return {
    duration: 2000,
    easing: 'cubicOut',
    delay: 0,
    from: Math.max(0, score - 50),
    to: score
  }
} 